#include "../my_io.h"

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>	
#include <sys/types.h>

int main(int argc, char *argv[]) {
	int fd;
	char buffer[128];
	char str[8];
	// Abrimos el archivo
	if ((fd = open("/dev/my_char_device", O_RDWR, 0666)) == -1)
	{
	   perror ("Error al abrir el dispositivo");
	   return -1;
	}
	// Escribimos
	strcpy(str,"hola");
	if (write(fd, &str, strlen(str)) < 0) {
		perror("Error escritura");
		return -1;
	}
	// Ponemos el puntero de lectura al inicio
	 if(lseek(fd,0,SEEK_SET) < 0) return -1;
	
	// Leemos - 1
	read(fd, buffer, 5);
	printf("Fichero: %s\n",buffer);
		
	// Cambiamos tamaño buffer
	if (ioctl(fd, IOCTL_MALLOC, 3) != 0)
		return -1;
	
	// Ponemos el puntero de lectura fuera del rango
	lseek(fd,7,SEEK_SET);
	
	// Reseteamos el puntero
	if (ioctl(fd, IOCTL_RESET) != 0)
		return -1;
	
	// Leemos - 2
	read(fd, buffer, 5);
	printf("Fichero: %s\n",buffer);
	
	// Movemos el puntero a la posicion 2
	if(lseek(fd,2,SEEK_SET) < 0) return -1;
	
	// Leemos - 3
	read(fd, buffer, 3);
	printf("Fichero: %s\n",buffer);
	
	// Movemos el puntero a la posicion inicial
	if(lseek(fd,-3,SEEK_END) < 0) return -1;
	
	// Leemos - 4
	read(fd, buffer, 3);
	printf("Fichero: %s\n",buffer);
	
	// Cambiamos tamaño buffer
	if (ioctl(fd, IOCTL_MALLOC, 10) != 0)
		return -1;
		
	// Reseteamos el puntero
	if (ioctl(fd, IOCTL_RESET) != 0)
		return -1;
		
	// Leemos - 5
	read(fd, buffer, 5);
	printf("Fichero: %s\n",buffer);
	
	// Ponemos el puntero en la posicion 2
	if(lseek(fd,-3,SEEK_CUR) < 0) return -1;
	
	// Leemos - 6
	read(fd, buffer, 2);
	printf("Fichero: %s\n",buffer);
	
	// Ponemos el puntero en la posicion 0
	if(lseek(fd,-4,SEEK_CUR) < 0) return -1;
	
	// Leemos - 7 
	read(fd, buffer, 2);
	printf("Fichero: %s\n",buffer);
	
	return 0;
}
